const fs = require('fs')

/**
 * 1. 打开 a 文件，使用 read 把数据读取到 buffer 中
 * 2. 打开 b 文件，使用 write 把 buffer 中的数据写入 b 文件
 */
let buf = Buffer.alloc(10)

// // 1. 打开 a 文件
// fs.open('a.txt', 'r', (err, rfd) => {
//   // 3. 打开 b 文件
//   fs.open('b.txt', 'w', (err, wfd) => {
//     // 2. 从打开的文件中读取数据到 buffer 中
//     fs.read(rfd, buf, 0, 10, 0, (err, readBytes) => {
//       // 4. 把 buffer 中的数据写入 b.txt
//       fs.write(wfd, buf, 0, 10, 0, (err, written) => {
//         console.log('写入成功')
//         fs.close(rfd)
//         fs.close(wfd)
//       })
//     })
//   })
// })

// // 数据完全拷贝
// fs.open('a.txt', 'r', (err, rfd) => {
//   // a+ 追加的操作方式
//   fs.open('b.txt', 'a+', (err, wfd) => {
//     fs.read(rfd, buf, 0, 10, 0, (err, readBytes) => {
//       fs.write(wfd, buf, 0, 10, 0, (err, written) => {
//         fs.read(rfd, buf, 0, 5, 10, (err, readBytes) => {
//           fs.write(wfd, buf, 0, 5, 10, (err, written) => {
//             console.log('写入成功')
//           })
//         })
//       })
//     })
//   })
// })

// 每次读取的长度
const BUFFER_SIZE = buf.length
// 读取的位置(起始文件)
let readOffset = 0

fs.open('a.txt', 'r', (err, rfd) => {
  fs.open('b.txt', 'w', (err, wfd) => {
    function next(){
      fs.read(rfd, buf, 0, BUFFER_SIZE, readOffset, (err, readBytes) => {
        if (!readBytes) {
          // 没有读取长度说明已经读取完毕
          fs.close(rfd)
          fs.close(wfd)
          console.log('拷贝完成')
          return
        }
        readOffset += readBytes
        fs.write(wfd, buf, 0, readBytes, (err, written) => {
          next()
        })
      })
    }
    next()
  })
})


